wayland: Set a more believable crossing detail on pointer enter/leave
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 9 Oct 2015 14:14:31 +0000 (16:14 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 13 Oct 2015 00:07:23 +0000 (02:07 +0200)
GDK_NOTIFY_ANCESTOR would happen when the pointer crosses across a direct
parent/child. However nonlinear events are more likely, specially when
the pointer moves across toplevels (either different apps, or menus being
popped up over the pointer position).

This makes popping up comboboxes and other menus that fall over the pointer
position possible. With the previous detail the GtkMenu code misinterpreted
the crossing event, making it think the button release coming right after
should dismiss the popup, which made menus just flash on the screen unless
you kept the button pressed.

gdk/wayland/gdkdevice-wayland.c

index b6e3fd01937807e2939b805e9eda0d12aa8d3d12..84a1167fdea426b0881aedf644b94bd289efe6d9 100644 (file)
@@ -881,7 +881,7 @@ pointer_handle_enter (void              *data,
   event->crossing.subwindow = NULL;
   event->crossing.time = (guint32)(g_get_monotonic_time () / 1000);
   event->crossing.mode = GDK_CROSSING_NORMAL;
-  event->crossing.detail = GDK_NOTIFY_ANCESTOR;
+  event->crossing.detail = GDK_NOTIFY_NONLINEAR;
   event->crossing.focus = TRUE;
   event->crossing.state = 0;
 
@@ -928,7 +928,7 @@ pointer_handle_leave (void              *data,
   event->crossing.subwindow = NULL;
   event->crossing.time = (guint32)(g_get_monotonic_time () / 1000);
   event->crossing.mode = GDK_CROSSING_NORMAL;
-  event->crossing.detail = GDK_NOTIFY_ANCESTOR;
+  event->crossing.detail = GDK_NOTIFY_NONLINEAR;
   event->crossing.focus = TRUE;
   event->crossing.state = 0;